import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_06_readbook.items import Scrapy06ReadbookItem

#這個方法的好處就是可以对于手动调换页面的网页我们使用此方法
#之前的当当不需要手动换页码，使用普通的足够

class ReadbookSpider(CrawlSpider):
    name = 'readbook'
    allowed_domains = ['www.dushu.com']
    #运行得到的json数据中缺少第一页的数据，是因为start_urls的地址不满足rules的allow要求
    # start_urls = ['http://www.dushu.com/book/1107.html']
    start_urls = ['http://www.dushu.com/book/1107_1.html']

    rules = (
        Rule(
            #这就是为到相同处理方了找式的所有页码
            # LinkExtractor(allow=r'Items/'),
            # \d代表数字
            # \d+代表多个数字
            # 后面的\是为了后面的.生效而写的

            #allow写的内容我们可以从页码的源码中 ：获取
            LinkExtractor(allow=r'/book/1107_\d\.html'),
            callback='parse_item',
            #True代表是否跟进，比如爬到第九页，但是10页之后都是省略号，此时为True就会继续跟进下载
            follow=True),
    )

    def parse_item(self, response):
        #获取某页的所有书名和图片
        # //div[@class="bookslist"]//h3/a/text()
        # //div[@class="bookslist"]//h3/a/@href
        list=response.xpath('//div[@class="bookslist"]//h3/a')
        for li in list:
            name=li.xpath('./text()').extract_first()
            src=li.xpath('./@href').extract_first()
            src='https://www.dushi.com'+src
            # print(name,src)
            book=Scrapy06ReadbookItem(name=name,src=src)
            yield book

